package com.company;
import java.util.ArrayList;
import java.lang.reflect.*;

public class genericity
{
    public static void main(String[] args)
    {
        ArrayList list1=new ArrayList();

        ArrayList<String> list2=new ArrayList<String>();
        list2.add("hello");
        //list2.add(20); list2不存在泛型 所以20无法加入
        Class c1=list1.getClass();
        Class c2=list2.getClass();
        System.out.println(c1==c2);
        //反射的操作都是编译之后的操作
        //c1==c2 说明编译之后集合的泛型是去泛型化的
        //Java中集合的泛型 都是防止错误输入的 只有在编译阶段有效
        //可以通过方法的反射来绕过编译

        try
        {
            Method m=c2.getMethod("add",Object.class);
            m.invoke(list2,100);//绕过编译
            System.out.println(list2.size());
            System.out.println(list2);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}
